from PyQt6.QtWidgets import (
    QTableWidget, QTableWidgetItem, 
    QHeaderView, QCheckBox, QWidget, QHBoxLayout, QSizePolicy, QFrame
)
from PyQt6.QtCore import Qt, QSize
from core.window_manager import window_manager
from .functions.activate import WindowActivate
from .functions.refresh import WindowRefresh
from .functions.select import MainAccountSelect
from .functions.status import WindowStatus

class WindowTable(QTableWidget):
    def __init__(self):
        super().__init__()
        
        self.init_ui()
        # 初始化完UI后立即刷新数据
        self.refresh_table()
    
    def init_ui(self):
        # 设置6列
        self.setColumnCount(6)
        self.setHorizontalHeaderLabels(["主账号", "序号", "窗口标题", "窗口ID", "激活", "任务状态"])
        
        # 恢复样式设置
        self.setFrameShape(QFrame.Shape.NoFrame)  # 去掉外边框
        self.setShowGrid(True)  # 显示网格线
        self.setStyleSheet("QTableWidget { gridline-color: #e0e0e0; }")  # 设置网格线颜色为浅灰色
        self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)  # 禁用垂直滚动条
        self.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)  # 固定高度
        
        # 设置表头样式
        self.horizontalHeader().setHighlightSections(False)  # 去掉表头高亮
        self.horizontalHeader().setDefaultAlignment(Qt.AlignmentFlag.AlignCenter)  # 表头居中对齐
        self.verticalHeader().setVisible(False)  # 隐藏垂直表头
        
        # 设置表格最小宽度，确保有足够空间显示内容
        # self.setMinimumWidth(600)  # 可以根据需要调整这个值

        
        # 设置表头和列宽
        header = self.horizontalHeader()
        
        # 先设置所有列自适应内容
        header.setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
        
        # 然后单独设置窗口标题列为Stretch模式
        header.setSectionResizeMode(2, QHeaderView.ResizeMode.Stretch)
        
        # 删除之前的这段代码，因为它会覆盖上面的设置：
        # header.setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents)
        
        # 设置行高
        row_height = 30  # 每行高度（可以根据需要调整）
        
        # 计算表格总高度（表头高度 + 3行数据的高度）
        header_height = self.horizontalHeader().height()
        total_height = header_height + (row_height * 3)
        
        # 设置表格固定高度
        self.setFixedHeight(total_height)
        
        # 限制最多显示3行
        
        # 设置表头背景色
        # self.horizontalHeader().setStyleSheet("""
        #     QHeaderView::section {
        #         background-color: #f5f5f5;  /* 浅灰色背景 */
        #     }
        # """)
        
        # 设置整行选择
        self.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)  # 整行选择
        self.setSelectionMode(QTableWidget.SelectionMode.SingleSelection)     # 单行选择模式
    
    def refresh_table(self):
        """刷新表格数据"""
        self.clearContents()
        self.setRowCount(0)
        
        # 使用功能模块
        windows = WindowRefresh.refresh_window_list(self)
        
        for index, window in enumerate(windows):
            row = self.rowCount()
            self.insertRow(row)
            self.setRowHeight(row, 30)  # 设置行高
            
            # 主账号（复选框）
            checkbox_widget = QWidget()
            checkbox_layout = QHBoxLayout(checkbox_widget)
            checkbox = QCheckBox()
            checkbox_layout.addWidget(checkbox)
            checkbox_layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
            checkbox_layout.setContentsMargins(0, 0, 0, 0)
            self.setCellWidget(row, 0, checkbox_widget)
            
            # 序号（从1开始）
            self.setItem(row, 1, QTableWidgetItem(str(index + 1)))
            
            # 窗口标题
            self.setItem(row, 2, QTableWidgetItem(window["title"]))
            
            # 窗口ID（句柄）
            self.setItem(row, 3, QTableWidgetItem(str(window["hwnd"])))
            
            # 激活
            self.setItem(row, 4, QTableWidgetItem("未激活"))
            
            # 任务状态
            WindowStatus.update_status(self, row, "空闲")
            WindowStatus.update_activate_status(self, row, False)